package com.leyou.trade.web;


import com.leyou.trade.entity.CartItem;
import com.leyou.trade.service.CartItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("cart")
public class CartController {

    @Autowired
    private CartItemService cartItemService;

    /**
     * 添加商品到购物车
     * @param cartItem    要添加到购物车的商品信息
     * @return          无
     */
    @PostMapping
    public ResponseEntity<Void> saveCartItem(@RequestBody CartItem cartItem) {
        //调用方法
        cartItemService.saveCartItem(cartItem);
        //返回
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }

    /**
     * 查看购物车信息
     * @return      购物车中的商品信息集合
     */
    @GetMapping("list")
    public ResponseEntity<List<CartItem>> queryCartList() {
        //调方法查询
        List<CartItem> list = cartItemService.queryCartList();
        //返回
        return ResponseEntity.ok(list);
    }

    /**
     * 修改商品数量
     * @param skuId    商品skuId
     * @param num       想要修改成的数量
     * @return      无
     */
    @PutMapping
    public ResponseEntity<Void> updateCart(@RequestParam("id")Long skuId,@RequestParam("num")Integer num) {
        //调用方法
        cartItemService.updateCart(skuId, num);
        //返回
        return ResponseEntity.noContent().build();
    }

    /**
     * 删除购物车商品
     * @param id        商品skuID
     * @return          无
     */
    @DeleteMapping("{id}")
    public ResponseEntity<Void> deleteBySkuId(@PathVariable("id")Long id) {
        cartItemService.deleteBySkuId(id);
        return ResponseEntity.noContent().build();
    }

    /**
     * 登录后购物车合并
     * @param list      未登录时购物车中的商品集合
     * @return         无
     */
    @PostMapping("list")
    public ResponseEntity<Void> addCartList(@RequestBody List<CartItem> list) {
        cartItemService.addCartList(list);
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }
}
